#include <async_simple/coro/Collect.h>
#include <async_simple/coro/Lazy.h>
#include <async_simple/coro/Sleep.h>
#include <async_simple/coro/SyncAwait.h>
#include <async_simple/executors/SimpleExecutor.h>
#include <gtest/gtest.h>

#include <chrono>


async_simple::coro::Lazy<int> func_one() {
    int x = 10;
    x += 10;
    co_return x;
}

TEST(AsyncSimpleTest, BasicTest) {
    auto result = async_simple::coro::syncAwait(func_one());
    EXPECT_EQ(result, 20);
}
class A {
public:
};
async_simple::coro::Lazy<void> loop1() {
    while (true) {
        std::cout << "Loop 1 is running" << std::endl;
        co_await async_simple::coro::sleep(std::chrono::milliseconds(10));// 异步等待
    }
}

async_simple::coro::Lazy<void> loop2() {
    while (true) {
        std::cout << "Loop 2 is running" << std::endl;
        co_await async_simple::coro::sleep(std::chrono::milliseconds(10));// 异步等待
    }
}

void start() {
    static async_simple::executors::SimpleExecutor executor(1);

    // 使用 start 让协程在后台异步运行，并指定调度器
    loop1().via(&executor).start([](auto &&) {});
    loop2().via(&executor).start([](auto &&) {});
}

TEST(AsyncSimpleTest, BasicTest1) {
    start();
    std::cout << "------> async <-----\n";


    // 等待协程运行（防止主线程退出）
    std::this_thread::sleep_for(std::chrono::seconds(1000));
}